home *** CD-ROM | disk | FTP | other *** search
/ Corel Professional Photo…etahs, Leopards & Jaguars / Corel Professional Photos - 1994 - 134 - Cheetahs, Leopards and Jaguars.ISO / drwmodel / setupapi.inc < prev    next >
Text File  |  1993-07-16  |  40KB  |  1,258 lines

  1. '' $Keywords: setupapi.inc 2.2 06Oct92 01:01pm$ $nokeywords$
  2. '**************************************************************************
  3. '*******************************  Windows API's  **************************
  4. '**************************************************************************
  5. GLOBAL hSetup AS INTEGER
  6. GLOBAL fFrameInit AS INTEGER
  7. GLOBAL fInstallInit AS INTEGER
  8.  
  9. CONST SM_CXSCREEN = 0
  10. CONST SM_CYSCREEN = 1
  11.  
  12. CONST WF_STANDARD =   16
  13. CONST WF_ENHANCED =   32
  14.  
  15.  
  16. '' DoMsgBox Flags
  17.  
  18. CONST MB_OK          = 0
  19. CONST MB_ICONHAND    = 16
  20. CONST MB_TASKMODAL   = 8192
  21.  
  22.  
  23. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  24. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  25. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  26. ''DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  27. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  28. ''DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  29. ''DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  30.  
  31.  
  32.  
  33.  
  34. '**************************************************************************
  35. '****************************** Setup Constants ***************************
  36. '**************************************************************************
  37.  
  38.  
  39. ''Command Option Flags
  40.  
  41. CONST cmoVital       = 1
  42. CONST cmoCopy        = 2
  43. CONST cmoUndo        = 4
  44. CONST cmoRoot        = 8
  45. CONST cmoDecompress  = 16
  46. CONST cmoTimeStamp   = 32
  47. CONST cmoReadOnly    = 64
  48. CONST cmoBackup      = 128
  49. CONST cmoForce       = 256
  50. CONST cmoRemove      = 512
  51. CONST cmoOverwrite   = 1024
  52. CONST cmoAppend      = 2048
  53. CONST cmoPrepend     = 4096
  54. CONST cmoNone        = 0
  55. CONST cmoAll         = 65535
  56.  
  57.  
  58. ''File Exist Modes
  59.  
  60. CONST femExists     = 0
  61. CONST femRead       = 1
  62. CONST femWrite      = 2
  63. CONST femReadWrite  = 3
  64.  
  65.  
  66. ''Read-Only Return Code
  67.  
  68. CONST ynrcNo         = 0
  69. CONST ynrcYes        = 1
  70. CONST ynrcErr1       = 2
  71. CONST ynrcErr2       = 3
  72. CONST ynrcErr3       = 4
  73. CONST ynrcErr4       = 5
  74. CONST ynrcErr5       = 6
  75. CONST ynrcErr6       = 7
  76. CONST ynrcErr7       = 8
  77. CONST ynrcErr8       = 9
  78. CONST ynrcErr9       = 10
  79.  
  80.  
  81. ''General Return Codes
  82.  
  83. CONST grcOkay       = 0
  84. CONST grcNotOkay    = 1
  85. CONST grcUserQuit   = 48
  86.  
  87.  
  88. ''Ranges
  89.  
  90. ''CONST cbSymValMax = 8192
  91. ''CONST cbSymValMax = 965
  92. ''CONST cbSymValMax = 4096
  93. CONST cbSymValMax = 2048
  94.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  95.     '' but we get Out of String Space wattdrvr error if we alloc
  96.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  97.     '' We should look into using dynamic far alloc instead of
  98.     '' STRING$ for large buffers.
  99.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  100.  
  101.  
  102. ''ON ERROR Error Codes
  103. CONST STFERR      = 1024   ''setup system error
  104. CONST STFQUIT     = 1025   ''user quit
  105.  
  106. CONST scmOff      = 0
  107. CONST scmOnIgnore = 1
  108. CONST scmOnFatal  = 2
  109.  
  110.  
  111. '**************************************************************************
  112. '********************************  Setup API's  ***************************
  113. '**************************************************************************
  114.  
  115. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  116.  
  117. '' common
  118.  
  119. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  120. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  121. ''DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  122. ''DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  124. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  125. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  126. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  127. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  128. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  129. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  130.  
  131.  
  132. ''shell
  133.  
  134. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  135. ''DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  136. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  137. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  138. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  139. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  140. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  141. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  142. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  143. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  144. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  145. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  146. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  147.  
  148.  
  149. ''shell
  150.  
  151. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  152. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  153. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  154.  
  155.  
  156.  
  157. ''install
  158.  
  159. ''DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  160. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  161. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  162. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  163. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  164. ''DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  165. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  166. ''DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  167. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  168. ''DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  169. ''DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  174. ''DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  175. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  176. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  177. ''DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  178. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  179. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  180. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  181. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  182. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  183. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  184. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  185. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  186. ''DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  187. ''DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  188. ''DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  189. ''DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  190. ''DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  191. ''DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  192. ''DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  193. ''DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  194. ''DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  195.  
  196. ''DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  197.  
  198.  
  199.  
  200. '*************************************************************************
  201. '****************  Setup Basic Wrapper Declarations  *********************
  202. '*************************************************************************
  203.  
  204.  
  205. ''shell
  206.  
  207. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  208. ''DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  209. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  210. DECLARE SUB UIPop (n%)
  211. DECLARE SUB UIPopAll
  212. DECLARE SUB SetTitle (sz$)
  213. DECLARE SUB ReadInfFile (szFile$)
  214. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  215. DECLARE SUB RemoveSymbol (szSym$)
  216. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  217. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  218. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  219. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  220. DECLARE SUB AddListItem(szSymbol$, szItem$)
  221. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  222.  
  223. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  224. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  225.  
  226. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  227. DECLARE SUB RestoreCursor (hPrev%)
  228.  
  229. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  230.  
  231.  
  232. ''install
  233.  
  234. DECLARE SUB CreateDir (szDir$, cmo%)
  235. DECLARE SUB RemoveDir (szDir$, cmo%)
  236. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  237. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  238. DECLARE SUB CopyFilesInCopyList
  239. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  240. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  241. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  242. DECLARE SUB ClearCopyList
  243. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  244. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  245. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  246. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  247. DECLARE SUB InitInstall
  248. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  249. DECLARE SUB ClearBillboardList
  250. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  251. DECLARE SUB CloseLogFile
  252. DECLARE SUB WriteToLogFile (szStr$)
  253. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  254. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  255.  
  256.  
  257. '' Error Handling
  258.  
  259. '$ifdef DEBUG
  260. '''$ifdef DEBUG1
  261.  
  262. '' Setup API Errors
  263. CONST saeFail   = 0
  264. CONST saeInit   = 1
  265. CONST saeNYI    = 3
  266. CONST saeArg    = 4    ''must be max sae value
  267.  
  268. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  269. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  270.  
  271. '' chk arg
  272. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  273. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  274. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  275. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  276.  
  277. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  278. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  279.  
  280. DECLARE SUB DumpCopyList (szFile$)
  281. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  282. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  283. '$endif ''DEBUG
  284.  
  285.  
  286.  
  287. '' Windows system detect
  288.  
  289. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  290. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  291. DECLARE FUNCTION GetWindowsDir  AS STRING
  292. DECLARE FUNCTION GetWindowsSysDir AS STRING
  293. ''DECLARE FUNCTION GetScreenWidth AS INTEGER
  294. ''DECLARE FUNCTION GetScreenHeight AS INTEGER
  295.  
  296.  
  297. '*************************************************************************
  298. '*****************  Setup Basic Wrapper Definitions  *********************
  299. '*************************************************************************
  300. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  301.     fFrameInit = 0
  302.     fInstallInit = 0
  303.  
  304.     IF hSetup > 0 THEN
  305. '$ifdef DEBUG
  306.         StfApiErr saeInit, "InitSetup", szCmdLine$
  307. '$endif ''DEBUG
  308.     END IF
  309.  
  310.     i% = InitFrame(szCmdLine$)
  311.     fFrameInit = 1
  312.  
  313.     InitInstall
  314.     fInstallInit = 1
  315.  
  316.     InitSetup = i%
  317. END FUNCTION
  318.  
  319.  
  320.  
  321. '**************************************************************************
  322. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  323.     IF hSetup > 0 THEN
  324. '$ifdef DEBUG
  325.         StfApiErr saeInit, "InitFrame", szCmdLine$
  326. '$endif ''DEBUG
  327.     ELSE
  328.         i% = InitializeFrame(szCmdLine$)
  329.         IF i% = -1 THEN
  330.             END   '' NOT an error - Usage (/?) or Command line copy operation
  331.         ELSEIF i% = 0 THEN
  332. '$ifdef DEBUG
  333.             StfApiErr saeFail, "InitFrame", szCmdLine$
  334. '$endif ''DEBUG
  335.             END
  336.         ELSE
  337.             InitFrame = i%
  338.         END IF
  339.     END IF
  340. END FUNCTION
  341.  
  342.  
  343. '**************************************************************************
  344. SUB SetBitmap(szDll$, Bitmap%) STATIC
  345.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  346. '$ifdef DEBUG
  347.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  348. '$endif ''DEBUG
  349.         ERROR STFERR
  350.     END IF
  351. END SUB
  352.  
  353.  
  354. '**************************************************************************
  355. ''SUB SetAbout(szAbout1$, szAbout2$) STATIC
  356. ''    IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  357. '''$ifdef DEBUG
  358. ''        StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  359. '''$endif ''DEBUG
  360. ''        ERROR STFERR
  361. ''    END IF
  362. ''END SUB
  363.  
  364.  
  365. '*************************************************************************
  366. SUB SetTitle(sz$) STATIC
  367.     SetWindowText HwndFrame(), sz$
  368. END SUB
  369.  
  370.  
  371. '*************************************************************************
  372. SUB ReadInfFile (szFile$) STATIC
  373. '$ifdef DEBUG
  374.     if FValidFATPath(szFile$) = 0 then
  375.         BadArgErr 1, "ReadInfFile", szFile$
  376.     end if
  377.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  378.         StfApiErr saeFail, "ReadInfFile", szFile$
  379. '$else  ''!DEBUG
  380.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  381. '$endif ''!DEBUG
  382.         ERROR STFERR
  383.     END IF
  384. END SUB
  385.  
  386.  
  387. '*************************************************************************
  388. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  389. '$ifdef DEBUG
  390.     if szDll$ = "" then
  391.         n% = 1
  392.     elseif szDlgProc$ = "" then
  393.         n% = 3
  394.     else
  395.         n% = 0
  396.     end if
  397.     if n% > 0 then
  398.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  399.     end if
  400. '$endif ''DEBUG
  401.  
  402.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  403. '$ifdef DEBUG
  404.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  405. '$endif ''DEBUG
  406.         ERROR STFERR
  407.     ELSE
  408.         UIStartDlg = GetSymbolValue("DLGEVENT")
  409.     END IF
  410. END FUNCTION
  411.  
  412.  
  413. '*************************************************************************
  414. SUB UIPop (n%) STATIC
  415.     IF FKillNDialogs(n%) = 0 THEN
  416. '$ifdef DEBUG
  417.         StfApiErr saeFail, "UIPop", STR$(n%)
  418. '$endif ''DEBUG
  419.         ERROR STFERR
  420.     END IF
  421. END SUB
  422.  
  423.  
  424. '*************************************************************************
  425. SUB UIPopAll STATIC
  426.     IF FKillNDialogs(65535) = 0 THEN
  427. '$ifdef DEBUG
  428.         StfApiErr saeFail, "UIPopAll", ""
  429. '$endif ''DEBUG
  430.         ERROR STFERR
  431.     END IF
  432. END SUB
  433.  
  434.  
  435. '*************************************************************************
  436. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  437. '$ifdef DEBUG
  438.     if szSymbol$ = "" then
  439.         BadArgErr 1, "GetSymbolValue", szSymbol$
  440.     end if
  441. '$endif ''DEBUG
  442.     szValue$ = string$(cbSymValMax,32)
  443.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  444.     GetSymbolValue = szValue$
  445.     IF Length% >= cbSymValMax THEN
  446.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  447.         ERROR STFERR
  448.     END IF
  449.     IF szSymbol$ = "" THEN
  450.         ERROR STFERR
  451.     END IF
  452.     szValue$ = ""
  453. END FUNCTION
  454.  
  455.  
  456. '*************************************************************************
  457. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  458. '$ifdef DEBUG
  459.     if szSymbol$ = "" then
  460.         BadArgErr 1, "GetListLength", szSymbol$
  461.     end if
  462. '$endif ''DEBUG
  463.     GetListLength = UsGetListLength(szSymbol$)
  464.     IF szSymbol$ = "" THEN
  465.         ERROR STFERR
  466.     END IF
  467. END FUNCTION
  468.  
  469.  
  470. '*************************************************************************
  471. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  472. '$ifdef DEBUG
  473.     if szListSymbol$ = "" then
  474.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  475.     end if
  476.  
  477.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  478.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  479.     end if
  480. '$endif ''DEBUG
  481.  
  482.     szListItem$ = string$(cbSymValMax,32)
  483.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  484.     GetListItem = szListItem$
  485.     IF Length% >= cbSymValMax THEN
  486.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  487.         ERROR STFERR
  488.     END IF
  489.     IF szListSymbol$ = "" THEN
  490.         ERROR STFERR
  491.     END IF
  492.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  493.         ERROR STFERR
  494.     end if
  495.     szListItem$ = ""
  496. END FUNCTION
  497.  
  498.  
  499. '*************************************************************************
  500. SUB AddListItem(szSymbol$, szItem$) STATIC
  501. '$ifdef DEBUG
  502.     if szSymbol$ = "" then
  503.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  504.     end if
  505. '$endif ''DEBUG
  506.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  507. '$ifdef DEBUG
  508.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  509. '$endif ''DEBUG
  510.         ERROR STFERR
  511.     END IF
  512. END SUB
  513.  
  514.  
  515. '*************************************************************************
  516. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  517. '$ifdef DEBUG
  518.     if szSymbol$ = "" then
  519.         nArg% = 1
  520.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  521.         nArg% = 2
  522.     else
  523.         nArg% = 0
  524.     end if
  525.     if nArg% > 0 then
  526.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  527.     end if
  528. '$endif ''DEBUG
  529.  
  530.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  531. '$ifdef DEBUG
  532.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  533. '$endif ''DEBUG
  534.         ERROR STFERR
  535.     END IF
  536. END SUB
  537.  
  538.  
  539. '**************************************************************************
  540. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  541. '$ifdef DEBUG
  542.     if szSymbol$ = "" then
  543.         n% = 1
  544.     elseif FValidInfSect(szSect$) = 0 then
  545.         n% = 2
  546.     else
  547.         n% = 0
  548.     end if
  549.     if n% > 0 then
  550.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  551.     end if
  552. '$endif ''DEBUG
  553.  
  554.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  555. '$ifdef DEBUG
  556.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  557. '$endif ''DEBUG
  558.         ERROR STFERR
  559.     END IF
  560. END SUB
  561.  
  562.  
  563. '*************************************************************************
  564. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  565. '$ifdef DEBUG
  566.     if szSymbol$ = "" then
  567.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  568.     end if
  569. '$endif ''DEBUG
  570.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  571. '$ifdef DEBUG
  572.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  573. '$endif ''DEBUG
  574.         ERROR STFERR
  575.     END IF
  576. END SUB
  577.  
  578.  
  579. '*************************************************************************
  580. SUB RemoveSymbol(szSym$) STATIC
  581. '$ifdef DEBUG
  582.     if szSym$ = "" then
  583.         BadArgErr 1, "RemoveSymbol", szSym$
  584.     end if
  585. '$endif ''DEBUG
  586.     IF FRemoveSymbol(szSym$) = 0 THEN
  587. '$ifdef DEBUG
  588.         StfApiErr saeFail, "RemoveSymbol", szSym$
  589. '$endif ''DEBUG
  590.         ERROR STFERR
  591.     END IF
  592. END SUB
  593.  
  594.  
  595. '*************************************************************************
  596. FUNCTION ShowWaitCursor STATIC AS INTEGER
  597.     ShowWaitCursor = HShowWaitCursor
  598. END FUNCTION
  599.  
  600.  
  601. '*************************************************************************
  602. SUB RestoreCursor (hPrev%) STATIC
  603.     i% = FRestoreCursor(hPrev%)
  604.     IF i% = 0 THEN
  605. '$ifdef DEBUG
  606.         StfApiErr saeFail, "RestoreCursor", ""
  607. '$endif ''DEBUG
  608.         ERROR STFERR
  609.     END IF
  610. END SUB
  611.  
  612.  
  613. '*************************************************************************
  614. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  615. '$ifdef DEBUG
  616.     if FValidInfSect(szSect$) = 0 then
  617.         n% = 1
  618.     elseif szKey$ = "" then
  619.         n% = 2
  620.     else
  621.         n% = 0
  622.     end if
  623.     if n% > 0 then
  624.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  625.     end if
  626. '$endif ''DEBUG
  627.  
  628.     szBuf$ = string$(128, 32)
  629.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  630.     IF Length% >= 128 THEN
  631.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  632.         ERROR STFERR
  633.     END IF
  634.  
  635.     IF Length% = -1 THEN
  636. '$ifdef DEBUG
  637.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  638. '$endif ''DEBUG
  639.         ERROR STFERR
  640.     END IF
  641.  
  642.     GetSectionKeyFilename = szBuf$
  643.     szBuf$ = ""
  644. END FUNCTION
  645.  
  646.  
  647. '*************************************************************************
  648. SUB InitInstall STATIC
  649.     IF hSetup > 0 THEN
  650. '$ifdef DEBUG
  651.         StfApiErr saeInit, "InitInstall", ""
  652. '$endif ''DEBUG
  653.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  654. '$ifdef DEBUG
  655.         StfApiErr saeFail, "InitInstall", ""
  656. '$endif ''DEBUG
  657.         END
  658.     END IF
  659. END SUB
  660.  
  661.  
  662. '*************************************************************************
  663. SUB CreateDir (szDir$, cmo%) STATIC
  664. '$ifdef DEBUG
  665.     if FValidFATDir(szDir$) = 0 then
  666.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  667.     end if
  668. '$endif ''DEBUG
  669.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  670. '$ifdef DEBUG
  671.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  672. '$endif ''DEBUG
  673.         ERROR STFERR
  674.     END IF
  675. END SUB
  676.  
  677.  
  678. '*************************************************************************
  679. SUB RemoveDir (szDir$, cmo%) STATIC
  680. '$ifdef DEBUG
  681.     if FValidFATDir(szDir$) = 0 then
  682.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  683.     end if
  684. '$endif ''DEBUG
  685.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  686. '$ifdef DEBUG
  687.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  688. '$endif ''DEBUG
  689.         ERROR STFERR
  690.     END IF
  691. END SUB
  692.  
  693.  
  694.  
  695. '*************************************************************************
  696. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  697. '$ifdef DEBUG
  698.     if FValidIniFile(szFile$) = 0 then
  699.         n% = 1
  700.     elseif FValidInfSect(szSect$) = 0 then
  701.         n% = 2
  702.     else
  703.         n% = 0
  704.     end if
  705.     if n% > 0 then
  706.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  707.     end if
  708. '$endif ''DEBUG
  709.  
  710.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  711. '$ifdef DEBUG
  712.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  713. '$endif ''DEBUG
  714.         ERROR STFERR
  715.     END IF
  716. END SUB
  717.  
  718.  
  719. '*************************************************************************
  720. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  721. '$ifdef DEBUG
  722.     if szGroup$ = "" or len(szGroup$) > 24 then
  723.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  724.     end if
  725. '$endif ''DEBUG
  726.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  727. '$ifdef DEBUG
  728.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  729. '$endif ''DEBUG
  730.         ERROR STFERR
  731.     END IF
  732. END SUB
  733.  
  734.  
  735. '*************************************************************************
  736. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  737. '$ifdef DEBUG
  738.     if szGroup$ = "" or len(szGroup$) > 24 then
  739.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  740.     end if
  741. '$endif ''DEBUG
  742.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  743. '$ifdef DEBUG
  744.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  745. '$endif ''DEBUG
  746.         ERROR STFERR
  747.     END IF
  748. END SUB
  749.  
  750.  
  751. '*************************************************************************
  752. SUB ClearCopyList STATIC
  753.     ResetCopyList
  754. END SUB
  755.  
  756.  
  757. '*************************************************************************
  758. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  759.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  760.     IF lNeed& < 0 THEN
  761. '$ifdef DEBUG
  762.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  763. '$endif ''DEBUG
  764.         ERROR STFERR
  765.     END IF
  766.     GetCopyListCost = lNeed&
  767. END FUNCTION
  768.  
  769.  
  770. '*************************************************************************
  771. SUB CopyFilesInCopyList STATIC
  772.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  773.  
  774.     IF grc% = grcUserQuit THEN
  775.         ERROR STFQUIT
  776.     ELSEIF grc% > 0 THEN
  777. '$ifdef DEBUG
  778.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  779. '$endif ''DEBUG
  780.         ERROR STFERR
  781.     END IF
  782. END SUB
  783.  
  784.  
  785. '*************************************************************************
  786. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  787. '$ifdef DEBUG
  788.     if FValidFATPath(szFullPathSrc$) = 0 then
  789.         n% = 1
  790.     elseif FValidFATPath(szFullPathDst$) = 0 then
  791.         n% = 2
  792.     else
  793.         n% = 0
  794.     end if
  795.     if n% > 0 then
  796.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  797.     end if
  798. '$endif ''DEBUG
  799.  
  800.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  801. '$ifdef DEBUG
  802.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  803. '$endif ''DEBUG
  804.         ERROR STFERR
  805.     END IF
  806. END SUB
  807.  
  808.  
  809.  
  810. '*************************************************************************
  811. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  812. '$ifdef DEBUG
  813.     if FValidFATPath(szFullPathSrc$) = 0 then
  814.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  815.     end if
  816. '$endif ''DEBUG
  817.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  818. '$ifdef DEBUG
  819.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  820. '$endif ''DEBUG
  821.         ERROR STFERR
  822.     END IF
  823. END SUB
  824.  
  825.  
  826. '*************************************************************************
  827. SUB RenameFile (szFullPath$, szBackup$) STATIC
  828. '$ifdef DEBUG
  829.     if FValidFATPath(szFullPath$) = 0 then
  830.         n% = 1
  831.     elseif szBackup$ = "" then
  832.         n% = 2
  833.     else
  834.         n% = 0
  835.     end if
  836.     if n% > 0 then
  837.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  838.     end if
  839. '$endif ''DEBUG
  840.  
  841.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  842. '$ifdef DEBUG
  843.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  844. '$endif ''DEBUG
  845.         ERROR STFERR
  846.     END IF
  847. END SUB
  848.  
  849.  
  850. '*************************************************************************
  851. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  852. '$ifdef DEBUG
  853.     if FValidInfSect(szSect$) = 0 then
  854.         n% = 1
  855.     elseif FValidFATDir(szSrc$) = 0 then
  856.         n% = 2
  857.     elseif FValidFATDir(szDest$) = 0 then
  858.         n% = 3
  859.     else
  860.         n% = 0
  861.     end if
  862.     if n% > 0 then
  863.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  864.     end if
  865. '$endif ''DEBUG
  866.  
  867.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  868. '$ifdef DEBUG
  869.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  870. '$endif ''DEBUG
  871.         ERROR STFERR
  872.     END IF
  873. END SUB
  874.  
  875.  
  876. '*************************************************************************
  877. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  878. '$ifdef DEBUG
  879.     if FValidInfSect(szSect$) = 0 then
  880.         n% = 1
  881.     elseif szKey$ = "" then
  882.         n% = 2
  883.     elseif FValidFATDir(szSrc$) = 0 then
  884.         n% = 3
  885.     elseif FValidFATDir(szDest$) = 0 then
  886.         n% = 4
  887.     else
  888.         n% = 0
  889.     end if
  890.     if n% > 0 then
  891.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  892.     end if
  893. '$endif ''DEBUG
  894.  
  895.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  896. '$ifdef DEBUG
  897.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  898. '$endif ''DEBUG
  899.         ERROR STFERR
  900.     END IF
  901. END SUB
  902.  
  903.  
  904. '*************************************************************************
  905. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  906. '$ifdef DEBUG
  907.     if szDll$ = "" then
  908.         n% = 1
  909.     elseif idDlg% = 0 then
  910.         n% = 2
  911.     elseif szProc$ = "" then
  912.         n% = 3
  913.     elseif lTicks& <= 0 then
  914.         n% = 4
  915.     else
  916.         n% = 0
  917.     end if
  918.     if n% > 0 then
  919.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  920.     end if
  921. '$endif ''DEBUG
  922.  
  923.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  924. '$ifdef DEBUG
  925.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  926. '$endif ''DEBUG
  927.         ERROR STFERR
  928.     END IF
  929. END SUB
  930.  
  931.  
  932. '*************************************************************************
  933. SUB ClearBillboardList STATIC
  934.     IF FClearBillboardList = 0 THEN
  935. '$ifdef DEBUG
  936.         StfApiErr saeFail, "ClearBillboardList", ""
  937. '$endif ''DEBUG
  938.         ERROR STFERR
  939.     END IF
  940. END SUB
  941.  
  942.  
  943. '*************************************************************************
  944. SUB OpenLogFile (szFile$, fAppend%) STATIC
  945. '$ifdef DEBUG
  946.     if FValidFATPath(szFile$) = 0 then
  947.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  948.     end if
  949. '$endif ''DEBUG
  950.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  951. '$ifdef DEBUG
  952.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  953. '$endif ''DEBUG
  954.         ERROR STFERR
  955.     END IF
  956. END SUB
  957.  
  958.  
  959. '*************************************************************************
  960. SUB CloseLogFile STATIC
  961.     IF FCloseLogFile() = 0 THEN
  962. '$ifdef DEBUG
  963.         StfApiErr saeFail, "CloseLogFile", ""
  964. '$endif ''DEBUG
  965.         ERROR STFERR
  966.     END IF
  967. END SUB
  968.  
  969.  
  970. '*************************************************************************
  971. SUB WriteToLogFile (szStr$) STATIC
  972.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  973. '$ifdef DEBUG
  974.         StfApiErr saeFail, "WriteToLogFile", szStr$
  975. '$endif ''DEBUG
  976.         ERROR STFERR
  977.     END IF
  978. END SUB
  979.  
  980.  
  981. '*************************************************************************
  982. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  983.     IsDirWritable = FIsDirWritable(szDir$)
  984. END FUNCTION
  985.  
  986.  
  987. '*************************************************************************
  988. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  989. '$ifdef DEBUG
  990.     if FValidFATDir(szFile$) = 0 then
  991.         BadArgErr 1, "IsFileWritable", szFile$
  992.     end if
  993. '$endif ''DEBUG
  994.     IsFileWritable = FIsFileWritable(szFile$)
  995. END FUNCTION
  996.  
  997.  
  998. '*************************************************************************
  999. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1000.     GetWindowsMajorVersion = GetVersion() MOD 256
  1001. END FUNCTION
  1002.  
  1003.  
  1004. '*************************************************************************
  1005. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1006.     GetWindowsMinorVersion = GetVersion() / 256
  1007. END FUNCTION
  1008.  
  1009.  
  1010. '*************************************************************************
  1011. FUNCTION GetWindowsDir STATIC AS STRING
  1012.     szBuf$ = string$(256, 32)
  1013.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1014.  
  1015.     IF cbBuf% = 0 THEN
  1016.         GetWindowsDir = ""
  1017. '$ifdef DEBUG
  1018.         StfApiErr saeFail, "GetWindowsDir", ""
  1019. '$endif ''DEBUG
  1020.         ERROR STFERR
  1021.     ELSE
  1022.         IF cbBuf% > 255 THEN
  1023.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1024.             ERROR STFERR
  1025.         END IF
  1026.         szBuf$ = RTRIM$(szBuf$)
  1027.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1028.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1029.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1030.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1031.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1032.         END IF
  1033.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1034.             szBuf$ = szBuf$ + "\"
  1035.         END IF
  1036.         GetWindowsDir = szBuf$
  1037.     END IF
  1038.  
  1039.     szBuf$ = ""
  1040. END FUNCTION
  1041.  
  1042.  
  1043. '*************************************************************************
  1044. FUNCTION GetWindowsSysDir STATIC AS STRING
  1045.     szBuf$ = string$(256, 32)
  1046.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1047.  
  1048.     IF cbBuf% = 0 THEN
  1049. '$ifdef DEBUG
  1050.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1051. '$endif ''DEBUG
  1052.         ERROR STFERR
  1053.     ELSE
  1054.         IF cbBuf% > 255 THEN
  1055.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1056.             ERROR STFERR
  1057.         END IF
  1058.         szBuf$ = RTRIM$(szBuf$)
  1059.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1060.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1061.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1062.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1063.         END IF
  1064.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1065.             szBuf$ = szBuf$ + "\"
  1066.         END IF
  1067.         GetWindowsSysDir = szBuf$
  1068.     END IF
  1069.  
  1070.     szBuf$ = ""
  1071. END FUNCTION
  1072.  
  1073.  
  1074. '*************************************************************************
  1075. ''FUNCTION GetScreenWidth STATIC AS INTEGER
  1076. ''    GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1077. ''END FUNCTION
  1078.  
  1079.  
  1080. '*************************************************************************
  1081. ''FUNCTION GetScreenHeight STATIC AS INTEGER
  1082. ''   GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1083. ''END FUNCTION
  1084.  
  1085.  
  1086.  
  1087.  
  1088. '**************************************************************************
  1089. '***************************  Error Handlers  *****************************
  1090. '**************************************************************************
  1091.  
  1092.  
  1093. '$ifdef DEBUG
  1094. '''$ifdef DEBUG1
  1095. '**************************************************************************
  1096. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1097.     select case nMsg%
  1098.         case saeFail
  1099.             lpText$ = "Failed"
  1100.         case saeInit
  1101.             lpText$ = "Already Initialized"
  1102.         case saeNYI
  1103.             lpText$ = "NYI"
  1104.         case else
  1105.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1106.     end select
  1107.  
  1108.     lpText$ = lpText$ + ": "+ szApi$
  1109.     if szArgs$ <> "" then
  1110.         lpText$ = lpText + " (" + szArgs$ + ")"
  1111.     end if
  1112.     lpCaption$ = "MS-Setup Toolkit API Error"
  1113.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1114.     print lpText$
  1115.      
  1116. ''        WriteToLogFile lpText$ 
  1117.     lpText$ = ""
  1118.     lpCaption$ = ""
  1119. END SUB
  1120.  
  1121. '**************************************************************************
  1122. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1123.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1124.     ERROR STFERR
  1125. END SUB
  1126.  
  1127.  
  1128. '** REVIEW: Move this function into common lib (we'll need it there too)
  1129. '**************************************************************************
  1130. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1131.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1132.         FValidInfSect = 0
  1133.     else
  1134.         FValidInfSect = 1
  1135.     end if
  1136. END FUNCTION
  1137.  
  1138.  
  1139. '** REVIEW: Move this function into common lib (we'll need it there too)
  1140. '**************************************************************************
  1141. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1142.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1143.         FValidIniFile = 0
  1144.     else
  1145.         FValidIniFile = 1
  1146.     end if
  1147. END FUNCTION
  1148.  
  1149. '**************************************************************************
  1150. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1151.  
  1152.     if szDrive$ = "" then
  1153.         FValidDrive = 0
  1154.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1155.         FValidDrive = 1
  1156.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1157.         FValidDrive = 0
  1158.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1159.         FValidDrive = 0
  1160.     elseif LEN(szDrive$) = 1 then
  1161.         FValidDrive = 1
  1162.     elseif INSTR(2,szDrive$,":\") = 2 then
  1163.         FValidDrive = 1
  1164.     elseif INSTR(1,szDrive$,":") = 2 then
  1165.         FValidDrive = 1
  1166.     else
  1167.         FValidDrive = 0
  1168.     end if
  1169. END FUNCTION
  1170.  
  1171. '*************************************************************************
  1172. SUB DumpCopyList (szFile$) STATIC
  1173. '$ifdef DEBUG
  1174.     if szFile$ = "" then
  1175.         BadArgErr 1, "DumpCopyList", szFile$
  1176.     end if
  1177. '$endif ''DEBUG
  1178.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1179. '$ifdef DEBUG
  1180.         StfApiErr saeFail, "DumpCopyList", szFile$
  1181. '$endif ''DEBUG
  1182.         ERROR STFERR
  1183.     END IF
  1184. END SUB
  1185.  
  1186. '*************************************************************************
  1187. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1188.  
  1189. '$ifdef DEBUG
  1190.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1191.         n% = 1
  1192.     elseif FValidFATPath(szDst$) = 0 then
  1193.         n% = 2
  1194.     elseif FValidFATDir(szDir$) = 0 then
  1195.         n% = 3
  1196.     else
  1197.         n% = 0
  1198.     end if
  1199.     if n% > 0 then
  1200.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1201.     end if
  1202. '$endif ''DEBUG
  1203.  
  1204.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1205. '$ifdef DEBUG
  1206.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1207. '$endif ''DEBUG
  1208.         ERROR STFERR
  1209.     END IF
  1210. END SUB
  1211.  
  1212. '*************************************************************************
  1213. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  1214. '$ifdef DEBUG
  1215.     if FValidInfSect(szSect$) = 0 then
  1216.         n% = 1
  1217.     elseif szKey$ = "" then
  1218.         n% = 2
  1219.     else
  1220.         n% = 0
  1221.     end if
  1222.     if n% > 0 then
  1223.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  1224.     end if
  1225. '$endif ''DEBUG
  1226.  
  1227.     szBuf$ = string$(128, 32)
  1228.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  1229.     IF Length% >= 128 THEN
  1230.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1231.         ERROR STFERR
  1232.     END IF
  1233.  
  1234.     IF Length% = -1 THEN
  1235. '$ifdef DEBUG
  1236.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  1237. '$endif ''DEBUG
  1238.         ERROR STFERR
  1239.     END IF
  1240.  
  1241.     GetSectionKeySize = VAL(szBuf$)
  1242.     szBuf$ = ""
  1243. END FUNCTION
  1244.  
  1245.  
  1246.  
  1247. '$endif ''DEBUG
  1248.  
  1249.  
  1250. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1251.  
  1252. End Trap
  1253.  
  1254. hSetup = InitSetup(COMMAND$)
  1255.  
  1256. ON ERROR GOTO QUIT
  1257.  
  1258.